package ast;

/*
 *  Expresion asociado a los elementos de entrada: Boton, Fotoresistencia, Potenciometro. 
 *  Nodo del arbol semantico.
 */

public class ExpEntrada implements Expresion  {

	/**
	 * ATTRIBUTES
	 */
	// tiempo del delay (en segundos)
	private int _IdVarTiempo;
	// id de la variable donde se guardaran los reciduos de la asignacion
	private int _IdVarResiduos;
	// pin donde se encuentra conectado el elemento
	private int _Pin;
	// si este elemento es un boton
	private boolean _IsBoton;
	
	/**
	 * 
	 * Connstructor
	 */
	public ExpEntrada(  int pPin, int pIdVarTiempo, int pIdVarResiduos, boolean pIsBoton ){
		_IdVarTiempo 	= pIdVarTiempo;
		_IdVarResiduos 	= pIdVarResiduos;
		_Pin 			= pPin;
		_IsBoton		= pIsBoton;
	}
	
	/**
	 * Codigo asociado a esta expresion
	 */
	@Override
	public String GenerarCodigo() {
		String code = new String();
		String strVarTiempo   = String.valueOf(_IdVarTiempo);
		String strVarResiduos = String.valueOf(_IdVarResiduos);
		String strPin 		= String.valueOf(_Pin);
		// delay
		code += ConstCode.DELAY_FUNCTION + ConstCode.VAR + strVarTiempo + ConstCode.MULTI;
		code += ConstCode.FACTOR_TIME + ConstCode.CIERRE_FUNCTION + ConstCode.FIN_LINE;
		// asignacion
		code += ConstCode.FLUJO + ConstCode.ASIG_SUMA;
		if( _IsBoton ){ code +=  "digitalRead( ";
		}else { code +=  "analogRead( "; }
		code += strPin + ConstCode.CIERRE_FUNCTION + ConstCode.FIN_LINE;	
		code += ConstCode.IF_EXP + ConstCode.FLUJO + ConstCode.MAYOR + ConstCode.MAX + ConstCode.END_IF_EXP;
		code += ConstCode.VAR + strVarResiduos +  ConstCode.ASIG + ConstCode.FLUJO + ConstCode.RESTA + ConstCode.MAX + ConstCode.FIN_LINE;
		code += ConstCode.FLUJO + ConstCode.ASIG_RESTA + ConstCode.VAR + strVarResiduos + ConstCode.FIN_LINE;
		code += ConstCode.ELSE;
		code += ConstCode.VAR + strVarResiduos +  ConstCode.ASIG + ConstCode.CERO + ConstCode.FIN_LINE;
		code += ConstCode.END_CORCHET;
		
		return code;
		/*
		delay(var*1000);
		flujo += analogRead( _Pin );
		varResiduo = flujo � MAX;
		flujo = flujo � varResiduo;
		 */
	}
	
	
}
